home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / assembly / basmify.lha / Basmify / Assemble.ced next >
Text File  |  1995-09-26  |  9KB  |  327 lines

  1. /* Assemble the source in the current window of CygnusEd using BAsm.
  2. **
  3. ** This ARexx script assembles the source found in the currently
  4. ** active window of CygnusEd (which activates this script).
  5. **
  6. ** Written and copyright in 1995 by Ulrich Flegel.
  7. ** All rights are reserved to the author Ulrich Flegel.
  8. **
  9. ** Publication and distribution only allowed by explicitly written permission from the author.
  10. ** This software may be distribute on the Aminet CD-ROMs.
  11. **
  12. ** system requirements:
  13. **    NextError.ced        (V1.0    or higher)
  14. **    CygnusEd        (V3.5    or higher)
  15. **    BAsm            (V1.123  or higher)
  16. **    Run            (AmigaOS release)
  17. **    WaitForPort        (ARexx   release)
  18. **    rx            (ARexx   release)
  19. **
  20. ** current version of this script:
  21. **
  22. ** $VER: Assemble.ced V1.0 (15-Sep-95)
  23. **
  24. ** usage:
  25. ** call as ARexx Macro from CygnusEd as: Assemble.ced BAsmOptions
  26. ** Exmaple BAsmOptions: -O+ -OW+
  27. */
  28.  
  29. /*============================================================================*/
  30.  
  31. OPTIONS RESULTS                    /* enable return codes     */
  32.  
  33. /*============================================================================*/
  34.  
  35. /* parameters used to control this program */
  36.  
  37. /* Assemble.ced  BAsmOptions */
  38.  
  39. ARG BAsmOptions
  40.  
  41. /*============================================================================*/
  42.  
  43. /* adapt the following variables to your system environment: */
  44.  
  45. NextError   = 'BAsmify:NextError.ced'            /* here substitute the complete path/name of the NextError.ced script */
  46. LaunchCmd   = 'C:Run >NIL:'                /* here substitute the command line how to launch BAsm in background */
  47. BAsmPath    = 'Work:Programming/Assembler/Barfly/'    /* here substitute the path where to find BAsm (don't forget the trailing "/") */
  48. BAsmName    = 'BAsm'                    /* here substitute the name you gave BAsm */
  49. BAsmStartup = '-A'                    /* here substitute the startup option needed to make BAsm listen to it's port */
  50. TempPath    = 'T:'                    /* here substitute the path where temporary data is to store */
  51.  
  52. /*============================================================================*/
  53.  
  54. BAsmError_Max        = 200
  55. BAsmError_OK        = 0
  56. BAsmError_False        = 20
  57. BAsmError_OpenError    = 1
  58. BAsmError_SourceError    = 2
  59. BAsmError_ReadError    = 3
  60. BAsmError_UnknownOption    = 4
  61. BAsmError_MemoryError    = 5
  62. BAsmError_NoSourceFile    = 6
  63. BAsmError_NoNextError    = 7
  64. BAsmError_NoErrorList    = 8
  65. BAsmError_NoNextWarning    = 9
  66. BAsmError_NoWarningList    = 10
  67.  
  68. /*============================================================================*/
  69.  
  70. /* ARexx ports used */
  71.  
  72. Port_BAsm='rexx_BASM'
  73.  
  74. Port_CygnusEd=ADDRESS()
  75. IF (LEFT(Port_CygnusEd, 8) ~= 'rexx_ced') THEN    /* not started by CygnusEd ? */
  76.     Port_CygnusEd='rexx_ced'
  77.  
  78. /*============================================================================*/
  79.  
  80. ScriptErrorLevel = 6
  81.  
  82. SIGNAL ON SYNTAX                /* ensure clean exit       */
  83.  
  84. IF ~ SHOW('P', Port_CygnusEd) THEN        /* is CygnusEd AREXX port available ? */
  85. DO
  86.     Say 'This script may only called by CygnusEd!'
  87. END
  88. ELSE
  89. DO
  90.  
  91. OPTIONS FAILAT ScriptErrorLevel            /* ignore warnings         */
  92.  
  93. /*============================================================================*/
  94.  
  95. /*
  96. ** Non localized strings used
  97. */
  98.  
  99.  
  100. STRING_ThisScript='Assemble.ced'
  101.  
  102. /*
  103. ** Localization of strings used
  104. */
  105.  
  106. ADDRESS VALUE Port_CygnusEd
  107. /*'QUERY CAT'*/            /* !!! here find out which language CED uses currently */
  108. Language=RESULT
  109. SELECT
  110. WHEN Language='deutsch' THEN
  111.     DO
  112.     STRING_Positive='OK'
  113.     STRING_Negative='Abbrechen'
  114.     STRING_Dismiss='Aufgeben'
  115.     STRING_BAsmFailure_Title='BAsm Fehler-Report'
  116.     ERROR_NoSource='Kein Source vorhanden!'
  117.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' konnte nicht gefunden werden!"
  118.     ERROR_BAsmWarnings='Assemblierung mit Warnungen abgeschlossen.'
  119.     ERROR_BASM_UnknownErrorCode='Ein unbekannter Fehler ist aufgetreten!'
  120.     ERROR_BASM_OK='Assemblierung erfolgreich abgeschlossen.'
  121.     ERROR_BASM_False='Assemblierung aufgrund von Fehlern abgebrochen!'
  122.     ERROR_BASM_OpenError='Datei konnte nicht gefunden werden!'
  123.     ERROR_BASM_SourceError='Source Datei ist KEIN ASCII!'
  124.     ERROR_BASM_ReadError='Datei Lesefehler!'
  125.     ERROR_BASM_UnknownOption='Unbekannte BAsm Option(en) angegeben: '||BAsmOptions||'!'
  126.     ERROR_BASM_MemoryError='Nicht genug Speicher!'
  127.     ERROR_BASM_NoSourceFile='Keine Source Datei angegeben!'
  128.     END
  129. /*
  130. WHEN Language='XXX' THEN
  131.     DO
  132.     STRING_Positive='XXX'
  133.     STRING_Negative='XXX'
  134.     STRING_Dismiss='XXX'
  135.     STRING_BAsmFailure_Title='XXX'
  136.     ERROR_NoSource='XXX!'
  137.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"'XXX!"
  138.     ERROR_BAsmWarnings='XXX.'
  139.     ERROR_BASM_UnknownErrorCode='XXX!'
  140.     ERROR_BASM_OK='XXX!'
  141.     ERROR_BASM_False='XXX!'
  142.     ERROR_BASM_OpenError='XXX!'
  143.     ERROR_BASM_SourceError='XXX!'
  144.     ERROR_BASM_ReadError='XXX!'
  145.     ERROR_BASM_UnknownOption='XXX: '||BAsmOptions||'!'
  146.     ERROR_BASM_MemoryError='XXX!'
  147.     ERROR_BASM_NoSourceFile='XXX!'
  148.     END
  149. */
  150. OTHERWISE
  151.     DO
  152.     STRING_Positive='OK'
  153.     STRING_Negative='Cancel'
  154.     STRING_Dismiss='Dismiss'
  155.     STRING_BAsmFailure_Title='BAsm error report'
  156.     ERROR_NoSource='No source available!'
  157.     ERROR_NoBAsm="'"||BAsmPath||BAsmName||"' couldn't be found!"
  158.     ERROR_BAsmWarnings='Assembly finished with warnings.'
  159.     ERROR_BASM_UnknownErrorCode='An unknown error occurred!'
  160.     ERROR_BASM_OK='Assembly successfully finished.'
  161.     ERROR_BASM_False='Assembly stopped due to errors!'
  162.     ERROR_BASM_OpenError='Open file error during assembly'
  163.     ERROR_BASM_SourceError='A source file is NOT ASCII!'
  164.     ERROR_BASM_ReadError='Read file error during assembly!'
  165.     ERROR_BASM_UnknownOption='Unknown BAsm option(s) supplied: '||BAsmOptions||'!'
  166.     ERROR_BASM_MemoryError='Not enough memory to finish assembly!'
  167.     ERROR_BASM_NoSourceFile='No source file specified!'
  168.     END
  169. END
  170.  
  171. /*============================================================================*/
  172.  
  173. /*
  174. ** Finally do something 
  175. */
  176.  
  177. ADDRESS VALUE Port_CygnusEd
  178. 'STATUS 16'
  179. IF (RESULT=0) THEN
  180. /*
  181. ** PATH: No source available
  182. */
  183.     DO
  184.     'OKAY1 '||ERROR_NoSource
  185.     END
  186. ELSE
  187. /*
  188. ** PATH: Assemble source
  189. */
  190.     DO
  191. /*==== Save if file source modified ====*/
  192.  
  193.     ADDRESS VALUE Port_CygnusEd
  194.     'STATUS 18'
  195.     IF ~(RESULT=0) THEN 'SAVE'
  196.  
  197.     'STATUS 21'
  198.     Filename_Source=RESULT
  199.  
  200.     'STATUS 19'
  201.     Pathname_Source=RESULT
  202.  
  203. /*==== checking presence of BAsm ====*/
  204.  
  205.     RemoveBAsmAfterProcessing = FALSE        /* indicates wether BAsm is to remove after processing (e.g. because it was not existent before) */
  206.  
  207.     IF Filename_Source = '' THEN
  208.         DO
  209.         'OKAY1 '||ERROR_NoSource
  210.         END
  211.     ELSE
  212.         DO
  213.         IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm AREXX port available ? */
  214.             DO        
  215.             ADDRESS COMMAND LaunchCmd||' '||BAsmPath||BAsmName||' '||BAsmStartup    /* no, launch BAsm */
  216.   
  217.             IF RC = 0 THEN
  218.                 DO                /* no error occured ? */
  219.                 RemoveBAsmAfterProcessing = TRUE    /* BAsm had to be loaded, so it must be removed after processing */
  220.                 ADDRESS COMMAND WaitForPort Port_BAsm
  221.                 END
  222.             ELSE
  223.                 DO
  224.                 ADDRESS VALUE Port_CygnusEd
  225.                 'OKAY1 '||ERROR_NoBAsm
  226.                 EXIT 0
  227.                 END
  228.             END
  229.  
  230.         IF ~ SHOW('P', Port_BAsm) THEN        /* is BAsm running ? */
  231.             DO
  232.             ADDRESS VALUE Port_CygnusEd
  233.             'OKAY1 '||ERROR_NoBAsm
  234.             END
  235.         ELSE
  236.             DO
  237.             ADDRESS VALUE Port_BAsm        /* Hey, BAsm, listen to your master */
  238.  
  239. /*==== remote control BAsm now ====*/
  240.  
  241.             OPTIONS FAILAT BAsmError_Max
  242.             'BASM -e+ -es- '||BAsmOptions||' '||PathName_Source
  243.  
  244.             ADDRESS VALUE Port_CygnusEd
  245.  
  246.             SELECT
  247.             WHEN RC = BAsmError_OpenError THEN
  248.                 'OKAY1 '||ERROR_BASM_OpenError
  249.             WHEN RC = BAsmError_SourceError THEN
  250.                 'OKAY1 '||ERROR_BASM_SourceError
  251.             WHEN RC = BAsmError_ReadError THEN
  252.                 'OKAY1 '||ERROR_BASM_ReadError
  253.             WHEN RC = BAsmError_UnknownOption THEN
  254.                 'OKAY1 '||ERROR_BASM_UnknownOption
  255.             WHEN RC = BAsmError_MemoryError THEN
  256.                 'OKAY1 '||ERROR_BASM_MemoryError
  257.             WHEN RC = BAsmError_NoSourceFile THEN
  258.                 'OKAY1 '||ERROR_BASM_NoSourceFile
  259.             WHEN RC = BAsmError_False THEN
  260.                 DO
  261.                 'OKAY1 '||ERROR_BASM_False
  262.                 /*---- call Error display routine ----*/
  263.                 ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_CygnusEd
  264.                 END
  265.             WHEN RC = BAsmError_OK THEN
  266.                 DO
  267.                 ADDRESS VALUE Port_BAsm
  268.                 'BINITWARNING'
  269.                 IF (RC = BAsmError_NoWarningList) THEN
  270.                     DO
  271.                     ADDRESS VALUE Port_CygnusEd
  272.                     'OKAY1 '||ERROR_BASM_OK
  273.                     END
  274.                 ELSE
  275.                     DO
  276.                     ADDRESS VALUE Port_CygnusEd
  277.                     'OKAY1 '||ERROR_BAsmWarnings
  278.                     /*---- call Error display routine ----*/
  279.                     ADDRESS COMMAND 'SYS:RexxC/rx '||NextError||' '||Port_CygnusEd
  280.                     END
  281.                 END
  282.             OTHERWISE
  283.                 'OKAY1 '||ERROR_BASM_UnknownErrorCode
  284.  
  285.             OPTIONS FAILAT ScriptErrorLevel
  286.             END
  287.  
  288. /*
  289.             IF (RemoveBAsmAfterProcessing = TRUE) THEN
  290.                 DO
  291.                 ADDRESS VALUE Port_BAsm
  292.                 'BEND'
  293.                 END
  294. */
  295.             END
  296.         END
  297.     END
  298.  
  299. /*=============================================================================*/
  300.  
  301. END    /* IF ~ SHOW('P', Port_CygnusEd) */
  302.  
  303. EXIT
  304.  
  305. SYNTAX:
  306.  
  307. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  308. ADDRESS VALUE Port_CygnusEd
  309. 'OKAY1 Script error!'
  310. EXIT
  311.  
  312. /*=============================================================================*/
  313.  
  314.  
  315. /*
  316. ** version history:
  317. ** ---------------
  318. **
  319. ** V1.0        : -first public version
  320. **
  321. ** known bugs in the latest version/revision:
  322. ** -----------------------------------------
  323. ** - No localization supported. I don't know the ARexx CygnusEd command to find out the currect used language.
  324. **
  325. */
  326.  
  327.